// 引入测试题目管理工具模块
const testQuestionManager = require('../../../../utils/testQuestionManager.js');

// 定义题目编辑页面
Page({
  data: {
    testType: '',  // 测试类型，如SAS或SDS
    testName: '',  // 测试名称
    isNewQuestion: true, // 是否为新题目
    questionId: '', // 编辑时的题目ID
    question: {
      content: '', // 题目内容
      options: [ // 选项数组，默认包含4个标准选项
        { text: '没有或很少时间', score: 1 },
        { text: '小部分时间', score: 2 },
        { text: '相当多时间', score: 3 },
        { text: '绝大部分或全部时间', score: 4 }
      ],
      isReverse: false, // 是否反向计分
      active: true // 是否启用
    },
    buttonDisabled: true // 保存按钮是否禁用
  },

  // 页面加载时执行，处理传入的参数
  onLoad: function(options) {
    if (!options.type) {
      wx.showToast({ title: '参数错误', icon: 'none' });
      setTimeout(() => wx.navigateBack(), 1500);
      return;
    }

    // 根据传入的类型设置测试类型和名称
    const testType = options.type;
    let testName = '测试量表';
    if (testType === 'SAS') {
      testName = '焦虑自评量表(SAS)';
    } else if (testType === 'SDS') {
      testName = '抑郁自评量表(SDS)';
    }

    this.setData({ testType, testName });

    // 判断是新增还是编辑模式
    if (options.id) {
      this.setData({ 
        isNewQuestion: false,
        questionId: options.id
      });
      this.loadQuestionData(options.id);
    } else {
      // 新增模式，验证默认表单状态
      this.validateForm();
    }
  },

  // 加载题目数据（编辑模式）
  loadQuestionData: async function(questionId) {
    // 显示加载提示
    wx.showLoading({ title: '加载中...', mask: true });
    try {
      // 从管理工具获取题目数据
      const question = await testQuestionManager.getTestQuestion(questionId);
      if (question) {
        this.setData({ 
          question,
          buttonDisabled: false
        });
      } else {
        // 题目不存在，显示错误并返回
        wx.showToast({ title: '题目不存在', icon: 'none' });
        setTimeout(() => wx.navigateBack(), 1500);
      }
    } catch (error) {
      // 错误处理
      console.error('加载题目数据失败', error);
      wx.showToast({ title: '加载失败', icon: 'none' });
    } finally {
      // 隐藏加载提示
      wx.hideLoading();
    }
  },

  // 更新题目内容的事件处理函数
  onContentInput: function(e) {
    this.setData({
      'question.content': e.detail.value
    });
    // 更新后重新验证表单
    this.validateForm();
  },

  // 更新选项文本的事件处理函数
  onOptionTextInput: function(e) {
    // 获取当前操作的选项索引和输入值
    const index = e.currentTarget.dataset.index;
    const value = e.detail.value;
    const options = this.data.question.options;
    options[index].text = value;
    
    // 更新数据并验证表单
    this.setData({
      'question.options': options
    });
    this.validateForm();
  },

  // 更新选项分值的事件处理函数
  onOptionScoreInput: function(e) {
    // 获取当前操作的选项索引和输入值
    const index = e.currentTarget.dataset.index;
    const value = parseInt(e.detail.value) || 0;
    const options = this.data.question.options;
    options[index].score = value;
    
    // 更新数据并验证表单
    this.setData({
      'question.options': options
    });
    this.validateForm();
  },

  // 添加新选项的事件处理函数
  addOption: function() {
    const options = this.data.question.options;
    // 添加一个新的空选项
    options.push({ text: '', score: 1 });
    
    // 更新数据并验证表单
    this.setData({
      'question.options': options
    });
    this.validateForm();
  },

  // 删除选项的事件处理函数
  removeOption: function(e) {
    const index = e.currentTarget.dataset.index;
    const options = this.data.question.options;
    
    // 确保至少保留2个选项
    if (options.length <= 2) {
      wx.showToast({ title: '至少需要2个选项', icon: 'none' });
      return;
    }
    
    // 删除指定索引的选项
    options.splice(index, 1);
    this.setData({
      'question.options': options
    });
    this.validateForm();
  },

  // 切换反向计分状态
  toggleReverse: function() {
    this.setData({
      'question.isReverse': !this.data.question.isReverse
    });
  },

  // 切换题目启用状态
  toggleActive: function() {
    this.setData({
      'question.active': !this.data.question.active
    });
  },

  // 表单验证函数，检查必填项是否已填写
  validateForm: function() {
    const question = this.data.question;
    
    // 检查题目内容是否为空
    if (!question.content.trim()) {
      this.setData({ buttonDisabled: true });
      return false;
    }
    
    // 检查每个选项是否完整填写
    for (const option of question.options) {
      if (!option.text.trim() || option.score < 1) {
        this.setData({ buttonDisabled: true });
        return false;
      }
    }
    
    // 表单验证通过，启用保存按钮
    this.setData({ buttonDisabled: false });
    return true;
  },

  // 保存题目到数据库
  saveQuestion: async function() {
    // 先验证表单
    if (!this.validateForm()) {
      wx.showToast({ title: '请完善题目内容', icon: 'none' });
      return;
    }
    
    // 显示保存中提示
    wx.showLoading({ title: '保存中...', mask: true });
    
    try {
      // 准备题目数据
      const questionData = {
        testType: this.data.testType,
        content: this.data.question.content,
        options: this.data.question.options,
        isReverse: this.data.question.isReverse,
        active: this.data.question.active
      };
      
      let success = false;
      
      // 根据是新增还是编辑模式执行不同操作
      if (this.data.isNewQuestion) {
        // 添加新题目
        const questionId = await testQuestionManager.addTestQuestion(questionData);
        success = !!questionId;
      } else {
        // 更新已有题目
        success = await testQuestionManager.updateTestQuestion(this.data.questionId, questionData);
      }
      
      // 处理保存结果
      if (success) {
        wx.showToast({ title: '保存成功', icon: 'success' });
        setTimeout(() => wx.navigateBack(), 1500);
      } else {
        wx.showToast({ title: '保存失败', icon: 'none' });
      }
    } catch (error) {
      // 错误处理
      console.error('保存题目失败', error);
      wx.showToast({ title: '保存失败', icon: 'none' });
    } finally {
      // 隐藏加载提示
      wx.hideLoading();
    }
  },

  // 返回上一页
  goBack: function() {
    wx.navigateBack();
  }
}); 